// utils/oilPrice.js
/**
 * 获取油价
 * 
 * @param {String} region 省份英文名，例如：'zhejiang', 'hubei', 'wuhan'
 * @returns {Promise<Object>} 返回油价对象 { '92': 'x.xx', '95': 'x.xx', '98': 'x.xx' }
 */
export const getOilPrice = (region = 'hubei') => {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `http://www.qiyoujiage.com/${region}.shtml`,
      method: 'GET',
      header: { 'User-Agent': 'Mozilla/5.0' },
      success: (res) => {
        try {
          const html = res.data;
          const match92 = html.match(/湖北92#汽油<\/dt>\s*<dd>([\d.]+)<\/dd>/);
          const match95 = html.match(/湖北95#汽油<\/dt>\s*<dd>([\d.]+)<\/dd>/);
          const match98 = html.match(/湖北98#汽油<\/dt>\s*<dd>([\d.]+)<\/dd>/);

          const oilPrices = {
            '92': match92 ? match92[1] : null,
            '95': match95 ? match95[1] : null,
            '98': match98 ? match98[1] : null,
          };
          resolve(oilPrices);
        } catch (error) {
          reject(error);
        }
      },
      fail: (err) => reject(err)
    });
  });
}

/**
 * 获取某年的油价调整时间表
 * 
 * @param {Number|String} year 年份，例如 2025
 * @returns {Promise<Array>} 返回数组，每项 { month: '1月', dates: ['1月2日24时', '1月16日24时'] }
 */
export const getOilPriceSchedule = (year = new Date().getFullYear()) => {
  return new Promise((resolve, reject) => {
    uni.request({
      url: `http://www.qiyoujiage.com/tz/${year}.shtml`,
      method: 'GET',
      header: { 'User-Agent': 'Mozilla/5.0' },
      success: (res) => {
        try {
          const html = res.data;

          // 匹配“具体调整时间如下：”之后的内容
          const mainMatch = html.match(/具体调整时间如下：([\s\S]*?)<\/div>/);
          if (!mainMatch) {
            resolve([]);
            return;
          }
          const mainContent = mainMatch[1];

          // 匹配每个月的调整日期
          const regex = /<p><strong>(\d+)月油价调整时间<\/strong>：([\d月日,、时]+)/g;
          let match;
          const datesArray = [];
          while ((match = regex.exec(mainContent)) !== null) {
            const month = parseInt(match[1], 10);
            const dates = match[2].split('、').map(d => d.trim());

            dates.forEach(d => {
              // 提取日
              const dayMatch = d.match(/(\d+)月?(\d+)日/);
              if (dayMatch) {
                const day = parseInt(dayMatch[2], 10);
                // 拼接成 YYYY-MM-DD
                const formatted = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
                datesArray.push(formatted);
              }
            });
          }

          // 按时间升序排序
          datesArray.sort((a, b) => new Date(a) - new Date(b));

          resolve(datesArray);
        } catch (error) {
          reject(error);
        }
      },
      fail: (err) => reject(err)
    });
  });
};

/**
 * 获取当前油价 + 下一次油价调整时间
 * 
 * @param {String} region 省份英文名，例如：'hubei'
 * @param {Number} year 年份，例如 2025
 * @returns {Promise<Object>} 返回 { oilPrices: { '92': 'x.xx', '95': 'x.xx', '98': 'x.xx' }, nextUpdate: 'YYYY-MM-DD' }
 */
export const getCurrentOilPriceWithNextUpdate = async (region = 'hubei', year = new Date().getFullYear()) => {
  try {
    // 并行获取油价和油价调整时间
    const [oilPrices, schedule] = await Promise.all([
      getOilPrice(region),
      getOilPriceSchedule(year)
    ]);

    // 找到下一次油价调整时间
    const today = new Date();
    let nextUpdate = null;
    for (let dateStr of schedule) {
      const date = new Date(dateStr);
      if (date >= today) {
        nextUpdate = dateStr;
        break;
      }
    }

    // 如果今年没有剩余的调整，尝试获取明年的第一条
    if (!nextUpdate) {
      const nextYearSchedule = await getOilPriceSchedule(year + 1);
      if (nextYearSchedule.length > 0) {
        nextUpdate = nextYearSchedule[0];
      }
    }
    return { oilPrices: oilPrices['92'], nextUpdate };
  } catch (error) {
    console.error('获取当前油价和下一次调整时间失败', error);
    return { oilPrices: null, nextUpdate: null };
  }
};
